#pragma once
#include "LoopThread.hpp"

class LoopThreadPool
{
private:
    EventLoop *_baseloop; // 主线程
    int _thread_count;    // 从属线程数量
    int _next_idx;        // 用来均匀分配线程的，记录下一次该分配哪个线程的下标

    std::vector<LoopThread *> _threads;  //?
    std::vector<EventLoop *> _loops;

public:
    LoopThreadPool(EventLoop *baseloop)
        : _baseloop(baseloop), _thread_count(0), _next_idx(0) {}

    // 设置从属线程数量
    void SetThreadCount(int count) { _thread_count = count; }
    // 创建thread_count个从属线程
    void CreateThread()
    {
        _threads.resize(_thread_count);
        _loops.resize(_thread_count);

        // 创建线程
        for (int i = 0; i < _thread_count; i++)
        {
            LoopThread *lt = new LoopThread();
            _threads[i] = lt;
            _loops[i] = lt->GetLoop();
        }
    }

    // 获取一个线程eventloop
    EventLoop *GetLoop()
    {
        if(_thread_count == 0)
            return _baseloop;

        _next_idx = (_next_idx + 1) % _thread_count;
        return _loops[_next_idx];
    }
};